package net.yla.smartbus.module.ba.vehicle.utils;

import net.yla.smartbus.module.ba.vehicle.common.ExcelData;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.CellType;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 默苍离
 * @date 2021/6/21 12:30
 * <p>
 * ******************************************
 * @annotation: 我的 文件导出工具类
 */
public class MyExcelUtil {


    /**
     * 实体类 文件导出
     *
     * @param response
     * @param data
     * @throws IOException
     */
    public static void exportExcel(HttpServletResponse response, ExcelData data) throws IOException {

        //声明一个工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();

        //生成一个表格，设置表格名称为"sheet1"
        HSSFSheet sheet = workbook.createSheet("sheet1");

        //设置表格列宽度为10个字节
        sheet.setDefaultColumnWidth(10);

        //创建第一行表头
        HSSFRow headrow = sheet.createRow(0);

        //遍历添加表头()
        for (int i = 0; i < data.getHead().size(); i++) {
            //创建一个单元格
            HSSFCell cell = headrow.createCell(i);

            //创建一个内容对象
            HSSFRichTextString text = new HSSFRichTextString(data.getHead().get(i));

            //将内容对象的文字内容写入到单元格中
            cell.setCellValue(text);
        }

        //模拟遍历结果集，把内容加入表格
        List<List<String>> content = data.getData();

        for (int i = 0; i < content.size(); i++) {
            List<String> strings = content.get(i);
            HSSFRow row1 = sheet.createRow(i + 1);
            for (int j = 0; j < strings.size(); j++) {
                HSSFCell cell = row1.createCell(j);
                HSSFRichTextString text = new HSSFRichTextString(strings.get(j));
                cell.setCellValue(text);
            }
        }

        //准备将Excel的输出流通过response输出到页面下载
        //八进制输出流
        response.setContentType("application/octet-stream");

        //这后面可以设置导出Excel的名称，中文 不乱码
        response.setHeader("Content-disposition", "attachment;filename=" + new String(data.getFileName().getBytes("utf-8"), "ISO-8859-1") + ".xls");

        //刷新缓冲
        response.flushBuffer();

        //workbook将Excel写入到response的输出流中，供页面下载
        workbook.write(response.getOutputStream());

    }


    /**
     * xls结尾 读取 文件上传的 内容
     *
     * @throws IOException
     * @throws ParseException
     */
    public static List xls(InputStream inputStream) throws IOException, ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        //返回的集合
        ArrayList<ArrayList> list = new ArrayList<>();

//        //创建文件输入流 "F://G201.xls"
//        FileInputStream fileInput = new FileInputStream("F://G201.xls");
        //由输入流文件得到工作簿对象
        HSSFWorkbook wb = new HSSFWorkbook(inputStream);
        //获取第一个sheet
        HSSFSheet sheet = wb.getSheetAt(0);
        //获取表格内容的最后一行的行数
        int lastRowNum = sheet.getLastRowNum();

        //rowBegin代表要开始读取的行号，下面这个循环的作用是读取每一行内容
        for (int i = 1; i <= lastRowNum; ++i) {
            ArrayList<Object> list1 = new ArrayList<>();
            //获取每一行
            HSSFRow row = sheet.getRow(i);
            //获取每一行的最后一列的列号，即总列数
            int columnNum = row.getLastCellNum();
            for (int j = 0; j < columnNum; ++j) {

                //获取每个单元格
                HSSFCell cell = row.getCell(j);
                //对第一列日期进行特殊处理
                if (j == 0) {
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    list1.add(cellValue);
                }
            }
            list.add(list1);
        }
        wb.close();
        return list;
    }


}
